package com.bao.shop.service.impl;

import com.bao.shop.entity.User;
import com.bao.shop.service.CartService;
import com.bao.shop.service.UserService;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author baoye
 * @date 2024-07-25/17:05
 */
public class UserServiceImpl implements UserService {
    static {
        USER_LIST.add(new User("55","555555","55",5));
    }
    public  CartService cartService=new CartServiceImpl();
    /**
     * 注册-添加用户信息到USER_LIST
     * @param user 生成的用户
     */
    @Override
    public void register(User user) {
        if(USER_LIST.add(user)){
            System.out.println("注册成功!");
            cartService.addCart(user);//创建一个和用户对应的购物车
        }else{
            System.out.println("注册失败!");
        }
    }

    /**
     * 注册-校验用户信息
     * @return 返回校验完成后的用户信息
     */
    @Override
    public User registerManagement() {
        boolean flag=false;
        User newUser=new User();
        //用户重复校验
        while(!flag){
            System.out.print("请输入用户名:");
            String userName=INPUT.next();
            if(userName==null||"".equals(userName)||userName.length()==0){
                System.out.println("用户名不能为空!");
                continue;
            }
            if(findUser(userName)){
                System.out.println("用户名已经存在!");
                continue;
            }
            newUser.setUserName(userName);
            flag=true;
        }
        //密码校验
        flag=false;
        while(!flag){
            System.out.print("请输入密码:");
            String password=INPUT.next();
            if(!checkMessage(password)){
                System.out.println("密码长度不能小于6!");
                continue;
            }
            System.out.print("请再次输入密码:");
            if(!password.equals(INPUT.next())){
                System.out.println("两次输入的密码不一致!");
                continue;
            }
            newUser.setPassword(password);
            flag=true;
        }
        //年龄校验
        flag=false;
        System.out.print("请输入年龄:");
        while(!flag){
            Integer age= INPUT.nextInt();
            if(!checkMessage(age)){
                System.out.println("年龄必须是0-100之间的数字!");
                System.out.print("请重新输入年龄:");
                continue;
            }
            newUser.setAge(age);
            flag=true;
        }
        System.out.print("请输入昵称:");
        String fakeName=INPUT.next();
        newUser.setOtherName(fakeName);
        return newUser;
    }

    /**
     * 用户名查重
     * @param userName 输入的用户名
     * @return 返回查询结果 是/否
     */
    @Override
    public boolean findUser(String userName) {
        for (User user : USER_LIST) {
            if(user.getUserName().equals(userName)){
                return true;
            }
        }
        return false;
    }

    /**
     * 用户查找
     * @param user 根据不完全的用户信息(必须包含用户名) 查找
     * @return 返回查询的结果
     */
    @Override
    public User findUser(User user) {
        for (User u : USER_LIST) {
            if(u.equals(user)){
                return u;
            }
        }
        return null;
    }

    /**
     * 校验年龄信息
     * @param age 输入年龄
     * @return 返回结果
     */
    @Override
    public boolean checkMessage(Integer age) {
        return age>=0&&age<=100;
    }

    /**
     * 校验密码长度
     * @param password 输入密码
     * @return 返回结果
     */
    @Override
    public boolean checkMessage(String password) {
        return password.length()>=6;
    }

    /**
     * 登录-信息校验与输出结果
     * @return 返回用户信息
     */
    @Override
    public User login() {
        User user=new User();
        System.out.print("请输入用户名:");
        user.setUserName(INPUT.next());
        if(!findUser(user.getUserName())){
            System.out.println("用户名不存在!");
            return null;
        }
        System.out.print("请输入密码:");
        user.setPassword(INPUT.next());
        if(user.getPassword().equals(findUser(user).getPassword())){
            System.out.println("登录成功!");
            return findUser(user);
        }
        System.out.println("用户名或密码不正确!");
        return null;
    }

    /**
     * 注销
     * @return 返回false
     */
    @Override
    public boolean loginOut() {
        return false;
    }

    @Override
    public void printUser(User user) {
        Date date = new Date();
        String thisTime = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(date);
        System.out.println("\t\t\t当前时间:"+thisTime+"\n");
        System.out.println(user);
    }


}
